home *** CD-ROM | disk | FTP | other *** search
/ Network Support Library / RoseWare - Network Support Library.iso / btrieve / btr61m.exe / 05CH2.TXT < prev    next >
Text File  |  1993-07-16  |  25KB  |  676 lines

  1. CHAPTER 2       BTRIEVE ARCHITECTURE
  2.  
  3. If you are new to Btrieve, you should read this chapter before
  4. installing and configuring Btrieve. It provides an introduction to
  5. the Btrieve components and how they work with Btrieve
  6. applications. If you have used Btrieve before, you may want to skip
  7. to the example diagrams of Btrieve architecture, which begin in
  8. "Examples of Btrieve Architecture."
  9.  
  10. This chapter discusses the following topics:
  11.  
  12. o Components of Btrieve
  13. o Btrieve Applications on a Server
  14. o Btrieve Applications on a Workstation
  15. o Examples of Btrieve Architecture
  16.  
  17.  
  18. Components of Btrieve
  19.  
  20. The major components of server-based Btrieve are as follows:
  21.  
  22. o Server-Based Record Manager
  23. o Communications Programs
  24. o Workstation Requesters
  25. o Btrieve Utilities
  26.  
  27.  
  28. Server-Based Record Manager
  29.  
  30. Btrieve's server-based Record Manager (BTRIEVE.NLM) must be
  31. loaded at every server that accesses Btrieve files. The Btrieve NLM
  32. consists of a library of Btrieve functions and handles these tasks:
  33.  
  34. o Performs disk I/O for Btrieve files at the server where
  35.   it resides
  36.  
  37. o Provides concurrency and integrity controls on the server
  38.   where it resides
  39.  
  40. o Logs all Btrieve requests that result in changes to a
  41.   file (if logging is enabled for that file)
  42.  
  43.  
  44. Communications Programs
  45.  
  46. Btrieve provides the following communications programs:
  47.  
  48. o Btrieve Message Router (BROUTER.NLM)
  49. o BSPXCOM.NLM
  50. o BSPXSTUB.NLM
  51. o RSPXSTUB.NLM
  52.  
  53.  
  54. Btrieve Message Router
  55.  
  56. The Btrieve Message Router (BROUTER.NLM) handles outgoing
  57. requests from your server to a remote server. The Message Router
  58. allows a Btrieve application running as an NLM on the server to
  59. communicate with remote servers on which other Btrieve NLMs are
  60. loaded. Also, the Message Router maintains transaction
  61. concurrency controls during transactions involving Btrieve files on
  62. more than one server.
  63.  
  64. If your server-based application needs to access files on another
  65. server, you must have the Message Router loaded on your server.
  66. When you request files from another server, the Message Router
  67. sends that request to BSPXCOM (discussed in the next
  68. section) on the remote server.  BSPXCOM routes your request
  69. to the Btrieve NLM on that server and then sends the
  70. response back to the Message Router on your server.
  71.  
  72.  
  73. BSPXCOM
  74.  
  75. BSPXCOM handles incoming requests to the Btrieve NLM from a
  76. remote source.  The remote source could be a Requester at a
  77. workstation or the Message Router on another server.
  78. BSPXCOM must be loaded on servers that support remote
  79. requests.
  80.  
  81. If no workstations or other servers make
  82. requests to the Btrieve NLM, you may not want to have
  83. BSPXCOM loaded at your server.  For example, assume your
  84. Btrieve NLM receives calls only from other NLMs running at
  85. your server.  In this case, you could choose not to load
  86. BSPXCOM for security reasons.  (Not loading BSPXCOM allows
  87. you to restrict applications other than the ones on your
  88. server from accessing your Btrieve files.)
  89.  
  90.  
  91. BSPXSTUB and RSPXSTUB
  92.  
  93. If you do not load BSPXCOM and want to use the Btrieve
  94. Monitor utility, you must load either the BSPXSTUB or
  95. RSPXSTUB communications module.  These modules resolve
  96. external references for the Monitor utility that BSPXCOM
  97. would otherwise resolve.
  98.  
  99. Use the following guidelines to determine whether you need
  100. BSPXSTUB or RSPXSTUB:
  101.  
  102. o If you want to use the Btrieve Monitor utility but do not
  103.   want to load BSPXCOM, and the NLMs on the server are
  104.   accessing Btrieve files only on the local server, load
  105.   BSPXSTUB at the server.
  106.  
  107. o If you want to use the Btrieve Monitor utility
  108.   to monitor outgoing requests generated by
  109.   the Message Router to another server and you do not want to
  110.   load BSPXCOM, load RSPXSTUB instead of BSPXSTUB at the
  111.   server.
  112.  
  113. NOTE: The Btrieve Monitor utility's Communication Statistics
  114. option (discussed in Chapter 5, "Using Btrieve Utilities")
  115. displays SPX communication statistics.  The communications
  116. module you load affects the statistics displayed.  For
  117. example, if you load BSPXCOM, you see incoming and outgoing
  118. SPX statistics for BSPXCOM.  If you load BSPXSTUB, you see
  119. all zeros.  If you load RSPXSTUB, you see incoming and
  120. outgoing SPX communication statistics from the Message
  121. Router.
  122.  
  123.  
  124. Workstation Requesters
  125.  
  126. Btrieve provides the following Requesters for applications
  127. running on the workstation:
  128.  
  129. o BREQUEST.EXE - DOS Requester
  130. o BTRCALLS.DLL - OS/2 Requester
  131. o WBTRCALL.DLL - Windows Requester
  132.  
  133. NOTE: Btrieve now provides a requester for the UnixWare
  134. environment.  For information about this new UnixWare
  135. Requester, please refer to the Readme file that accompanies
  136. this release.
  137.  
  138. A Btrieve Requester must be loaded at each workstation that
  139. makes Btrieve requests.  The Requester receives Btrieve
  140. requests from an application and relays them via BSPXCOM to
  141. the Btrieve NLM running on the server.  After the Btrieve
  142. NLM processes the request, BSPXCOM sends the results back
  143. to the Requester, which forwards them to the application.
  144.  
  145. For information on starting the Requester in each operating
  146. environment, refer to Chapter 4, "Configuring and Using the
  147. Requesters."
  148.  
  149.  
  150. Btrieve Utilities
  151.  
  152. Btrieve provides the following utilities for Btrieve file
  153. management:
  154.  
  155. o Setup and Rebuild utilities (BSETUP.NLM and BREBUILD.NLM)
  156.   - You can use the Setup utility to change the settings of
  157.   Btrieve configuration options, and you can use the Rebuild
  158.   utility to convert existing Btrieve v5.x files to Btrieve
  159.   v6.x format.  (As "Rebuilding Existing Btrieve Files" in
  160.   Chapter 3 explains, you can choose to run the Rebuild
  161.   utility from within the Setup utility.)
  162.  
  163. o Monitor utility (BTRMON.NLM) - You can use this utility to
  164.   monitor the activity of Btrieve at the server.
  165.  
  166. o Maintenance utility (BUTIL.NLM) - You can use this
  167.   utility to import and export Btrieve data and transfer data
  168.   from one Btrieve file to another.  This utility also lets
  169.   you enable and disable continuous operation on your Btrieve
  170.   files.
  171.  
  172. o Roll Forward utilities (BROLLFWD.EXE for DOS, PBROLL.EXE
  173.   for OS/2, and WBROLL.EXE for Windows) - The Roll Forward
  174.   utilities recover changes made to a Btrieve file between
  175.   the time of the last backup and a system failure.  The Roll
  176.   Forward utilities are for workstation use only.
  177.  
  178. For more information about the Btrieve Setup and Rebuild
  179. utilities, refer to Chapter 3, "Installing and Configuring
  180. Btrieve." For information about the Btrieve Monitor,
  181. Maintenance, and Roll Forward utilities, refer to Chapter
  182. 5, "Using Btrieve Utilities."
  183.  
  184.  
  185. Btrieve Applications on a Server
  186.  
  187. A Btrieve application running on a server (that is, an NLM)
  188. can access data on the local server or on a remote server,
  189. as follows:
  190.  
  191. o Accessing Local Data - The application makes a request for
  192.   Btrieve data that is located on the local server.  The
  193.   request is processed by the Btrieve NLM on the server where
  194.   the Btrieve request originated.
  195.  
  196. o Accessing Remote Data - The application makes a request
  197.   for Btrieve data that is located on a remote server.  The
  198.   request is processed by the Btrieve NLM on the remote
  199.   server.  The following sections describe the events that
  200.   occur when your NLM application makes local and remote
  201.   requests.
  202.  
  203.  
  204. Server Application Accessing Local Data
  205.  
  206. When an application running on a server is accessing data
  207. on that server, the Btrieve NLM must be loaded on that
  208. server.  The following steps describe accessing data on the
  209. local server:
  210.  
  211. 1.  The application sends a request to the Btrieve NLM.  If
  212. the Message Router is not loaded, the call is made directly
  213. to the exported entry point of Btrieve on the local
  214. server.  If the Message Router is loaded, it relays the
  215. call to Btrieve on the local server.
  216.  
  217. 2.  Btrieve processes the request using the Btrieve library
  218. of function calls.
  219.  
  220. 3.  If the Message Router is not loaded, Btrieve returns the
  221. appropriate data and status code directly to the calling
  222. application.  If the Message Router is loaded, Btrieve
  223. returns the data and status code to the Message Router; the
  224. Message Router then transports the data and status code to
  225. the calling application.
  226.  
  227.  
  228. Server Application Accessing Remote Data
  229.  
  230. When an application running on a local server is accessing
  231. data on a remote server, the Message Router and the Btrieve
  232. NLM must be loaded on the local server, and BSPXCOM and the
  233. Btrieve NLM must be loaded on the remote server.  The
  234. following steps describe accessing data on a remote server:
  235.  
  236. 1.  The application (running on the local server) makes a
  237. request to access a Btrieve file located on a remote server.
  238.  
  239. 2.  The Message Router on the local server detects that the
  240. request is for a remote Btrieve file and sends the request
  241. to BSPXCOM on the remote server.
  242.  
  243. 3.  BSPXCOM (remote) relays the request to the Btrieve NLM
  244. (remote) by making Btrieve function calls.
  245.  
  246. 4.  The Btrieve NLM (remote) returns the appropriate data
  247. and status code to BSPXCOM (remote).
  248.  
  249. 5.  BSPXCOM (remote) returns the data and status code to
  250. (local), where the Btrieve request originated.
  251.  
  252. 6.  The Message Router (local) returns the results to the
  253. calling application (local).  The Message Router places the
  254. results in the application's memory at the location
  255. designated by the parameters passed to Btrieve in the
  256. function call.  Control then returns to the calling
  257. application.
  258.  
  259.  
  260. Btrieve Applications on a Workstation
  261.  
  262. A Btrieve application running on a workstation can access
  263. local, remote, or local and remote data as follows:
  264.  
  265. o Accessing Local Data - The application makes a request for
  266.   Btrieve data that is located on the workstation.  The
  267.   request is processed by client-based Btrieve on the same
  268.   workstation where the request originated.
  269.  
  270. o Accessing Remote Data - The application makes a request
  271.   for Btrieve data that is located on a remote server.  The
  272.   request is sent to the Requester, which passes the request
  273.   to the Btrieve NLM on the remote server.  The Btrieve NLM
  274.   processes the request.
  275.  
  276. o Accessing Local and Remote Data - The application makes a
  277.   request for Btrieve data that is located on the local
  278.   workstation or a remote server.  The request for data is
  279.   intercepted by the Requester.  The Requester determines if
  280.   the data is on the workstation or a remote server, and
  281.   routes the appropriate request to client-based Btrieve on
  282.   the workstation or the Btrieve NLM on a remote server.
  283.  
  284. The following sections explain what happens when your
  285. workstation application makes local and remote requests.
  286.  
  287.  
  288. Workstation Application Accessing Local Data
  289.  
  290. When an application is accessing local data on the workstation,
  291. client-based Btrieve must be loaded on the workstation.  The
  292. following steps describe accessing data on the workstation:
  293.  
  294. 1.  The application makes a Btrieve request using a
  295. function call.
  296.  
  297. 2.  The interface code that you link with your application
  298. makes the call to client-based Btrieve.  (Novell provides
  299. the interface code.)
  300.  
  301. In a Windows or OS/2 environment, you must import the
  302. function definition.
  303.  
  304. 3.  Client-based Btrieve processes the request using the
  305. Btrieve library of function calls.
  306.  
  307. 4.  Client-based Btrieve returns the appropriate data and
  308. status code directly to the calling application.
  309.  
  310.  
  311. Workstation Application Accessing Remote Data
  312.  
  313. When an application is accessing data on a remote server from a
  314. workstation, the Requester must be loaded on the
  315. workstation, and BSPXCOM and the Btrieve NLM must be loaded
  316. on the server.  The following steps describe accessing data
  317. on a server from an application running on the workstation:
  318.  
  319. 1.  The application makes a Btrieve request using a
  320. function call.
  321.  
  322. 2.  The interface code that you link with your application
  323. makes the call to the Requester.  (Novell provides the
  324. interface code.) In a Windows or OS/2 environment, you must
  325. import the function definition.
  326.  
  327. 3.  The Requester packages the request into a network
  328. message and routes the message to BSPXCOM on the remote
  329. server.
  330.  
  331. 4.  BSPXCOM receives the network message, validates the
  332. parameters, and then executes the request by making function
  333. calls to the Btrieve NLM.
  334.  
  335. 5.  The Btrieve NLM processes the request and returns the
  336. results to BSPXCOM.
  337.  
  338. 6.  BSPXCOM forwards the results to the Requester at the
  339. workstation.
  340.  
  341. 7.  The Requester returns the appropriate data and status
  342. code to the parameter variables in your application╒s
  343. memory and returns control to your application.
  344.  
  345.  
  346. Workstation Application Accessing Local and Remote Data
  347.  
  348. When an application is accessing local and remote data from
  349. a workstation, the Requester and client-based Btrieve must
  350. be loaded on the workstation, and BSPXCOM and NetWare
  351. Btrieve must be loaded on the server.  The following steps
  352. describe accessing local and remote data from an
  353. application running on the workstation:
  354.  
  355. 1.  The application makes a Btrieve request using a
  356. function call.
  357.  
  358. 2.  The interface code that you link with your application
  359. makes the call to the Requester.  (Novell provides the
  360. interface code.) In a Windows or OS/2 environment, you must
  361. import the function definition.
  362.  
  363. 3.  The Requester determines whether the server or the
  364. workstation should receive the request.
  365.  
  366. 4.  This step varies, depending on whether the requested
  367. data is on the workstation or on a remote server:
  368.  
  369. o If the requested data is on the workstation, the Requester
  370.   sends the request directly to client-based Btrieve.
  371.   Btrieve processes the request using the Btrieve library of
  372.   function calls.  Client-based Btrieve returns the
  373.   appropriate data and status code directly to the calling
  374.   application.
  375.  
  376. o If the requested data is on a remote server, the Requester
  377.   packages the request into a network message and routes the
  378.   message to BSPXCOM on that server.  BSPXCOM receives the
  379.   network message, validates the parameters, and then
  380.   executes the request by making function calls to the Btrieve
  381.   NLM.  The Btrieve NLM processes the request and returns the
  382.   results to BSPXCOM.  BSPXCOM forwards the results to the
  383.   Requester at the workstation.  The Requester returns the
  384.   data and status code to the calling application.
  385.  
  386.  
  387. Examples of Btrieve Architecture
  388.  
  389. The diagrams in this section demonstrate how different
  390. Btrieve applications require different Btrieve components.
  391. This section discusses the following examples:
  392.  
  393. o Server Application Using the Btrieve NLM
  394. o Server Application Using the Btrieve Message Router
  395. o Server Application Using the Btrieve Message Router and
  396.   BSPXCOM
  397. o Workstation Application Using the Requester and
  398.   Client-Based Btrieve
  399. o Server Application Using RSPXSTUB
  400. o Server Application Using BSPXSTUB
  401. o Server Application Using NetWare SQL
  402.  
  403. The following examples indicate remote requests with dashed
  404. lines and local requests with solid lines.
  405.  
  406.  
  407. Server Application Using the Btrieve NLM
  408.  
  409. Figure 2-1 shows an application accessing Btrieve data on
  410. the local server.  The application is making local requests
  411. to the local Btrieve NLM.  Note that BSPXCOM is not loaded
  412. because there are no incoming requests to the Btrieve NLM
  413. from another server or workstation.
  414.  
  415. Figure 2-1 Server Application Using the Btrieve NLM
  416.  
  417.         NLM Application
  418.                 |      ^
  419.                 |      |
  420.                 v      |
  421.                Btrieve NLM
  422.                 |      ^
  423.                 |      |
  424.                 v      |
  425.                 NetWare
  426.                 |      ^
  427.                 |      |
  428.         Server  |      |
  429.         --------|------|---------
  430.                 v      |
  431.              File System
  432.  
  433.  
  434.  
  435.  
  436. Server Application Using the Btrieve Message Router
  437.  
  438. Figure 2-2 shows an application running on Server A.  It is
  439. making requests to the local Btrieve NLM (Server A) and to
  440. a remote Btrieve NLM (Server B) via the Btrieve Message
  441. Router.  The Message Router handles outgoing requests from
  442. Server A to the remote Server B.  The Message Router must
  443. be loaded on Server A in order to send the requests to
  444. Server B.  BSPXCOM must be loaded on Server B to accept
  445. incoming requests from the Message Router.
  446.  
  447. Figure 2-2 Server Application Using the Btrieve Message
  448. Router
  449.  
  450.       NLM Application                          BSPXCOM
  451.           |     ^          +----------------   |     ^
  452.           |     |          |    +---------->   |     |
  453.           v     |          |    |              v     |
  454.      Btrieve Message <-----+    |            Btrieve NLM
  455.           Router                |              |     ^
  456.           |     ^---------------+              |     |
  457.           v     |                              v     |
  458.         Btrieve NLM                            NetWare
  459.           |     ^                              |     ^
  460.           |     |                              |     |  Server B
  461.           v     |                              |     |
  462.           NetWare                    ----------|-----|----------
  463.           |     ^                              v     |
  464. Server A  |     |                            File System
  465.           |     |
  466. ----------|-----|------
  467.           v     |
  468.         File System
  469.  
  470.  
  471.  
  472. Server Application Using the Btrieve Message Router and
  473. BSPXCOM
  474.  
  475. Figure 2-3 illustrates a server application that requires
  476. both the Btrieve Message Router and BSPXCOM.  In Figure
  477. 2-3, the Message Router handles outgoing requests from the
  478. local server to a remote server.  BSPXCOM handles incoming
  479. requests to the Btrieve NLM from a remote source (either a
  480. Requester at a workstation or the Message Router on another
  481. server).  The server is supporting incoming requests from a
  482. remote source and outgoing requests to a remote server.
  483.  
  484. Figure 2-3 Server Application Using the Btrieve Message
  485. Router and BSPXCOM
  486.  
  487.                                 NLM Application
  488.                                     |     ^
  489.                                     |     |
  490.                                     v     |
  491.                             +-->Btrieve Message Router<===>Outgoing requests
  492.                             |       |     ^                to/from a remote
  493.                             |       |     |                server
  494. Incoming requests from/to   |       v     |
  495.     a remote source    <====|==>    BSPXCOM
  496.                             |       |     ^
  497.                             |       |     |
  498.                             |       v     |
  499.                             +-->  Btrieve NLM
  500.                                     |     ^
  501.                                     |     |
  502.                                     v     |
  503.                                     NetWare
  504.                                     |     ^
  505.                           Server    |     |
  506.                                     |     |
  507.                           ----------|-----|------
  508.                                     v     |
  509.                                   File System
  510.  
  511.  
  512.  
  513. Workstation Application Using the Requester and Client-Based
  514. Btrieve
  515.  
  516. Figure 2-4 shows an application running on a workstation.
  517. The application is accessing local data via client-based
  518. Btrieve and remote data via the Requester.  The Requester
  519. passes requests for local data to client-based Btrieve.  In
  520. this environment, the Requester on the workstation performs
  521. the same function as the Message Router in Figure 2-3.
  522. BSPXCOM handles incoming requests to the Btrieve NLM from a
  523. remote source.
  524.  
  525. Figure 2-4 Workstation Application Using the Requester and
  526. Client-Based Btrieve
  527.  
  528.    Workstation
  529.    Application
  530.    Linked with
  531.   Interface Code +------------->  BSPXCOM
  532.      |   ^       |  +-----------    |  ^
  533.      |   |       |  |               |  |
  534.      v   |       |  |               v  |
  535.    Btrieve   ----+  |           Btrieve NLM
  536.    Requester <------+               |  ^
  537.      |   ^                          |  |
  538.      |   |                          v  |
  539.      v   |                        NetWare
  540.   Client-Base d             |  ^
  541.     Btrieve                |  |
  542.      |   ^                          |  |   Server
  543.      |   |                      ----|--|---------
  544.      v   |                          v  |
  545.    Client OS                    File System
  546.      |   ^
  547.      |   |
  548.      |   |   Workstation
  549. -----|---|--------------
  550.      v   |
  551.    File System
  552.  
  553.  
  554. Server Application Using RSPXSTUB
  555.  
  556. Figure 2-5 shows an application running on Server A.  It is
  557. accessing both local and remote data.  The Btrieve Monitor
  558. utility (BTRMON.NLM) is running on Server A.  To run the
  559. Monitor utility, Server A must have either BSPXCOM,
  560. BSPXSTUB, or RSPXSTUB loaded.
  561.  
  562. Since the Btrieve NLM on Server A is not accepting any
  563. incoming requests from workstations or remote servers,
  564. BSPXCOM is not loaded.  Instead, RSPXSTUB is loaded on
  565. Server A; it allows users to see the Btrieve Message
  566. Router╒s communication statistics through the Monitor
  567. utility's Communication Statistics option.
  568.  
  569. Figure 2-5 Server Application Using RSPXSTUB
  570.  
  571.     +----->NLM Application
  572.     |
  573.     |
  574.     |
  575.     |  +-->RSPXSTUB | BTRMON<--+
  576.     |  |               |
  577.     |  |               |
  578.     |  +-->Btrieve           |
  579.     +----->Message Router <====|=================> BSPXCOM
  580.            |     ^           |            |    ^
  581.                |     |         |                    |   |
  582.                |     |         |                    v   |
  583.                |     |         |                  Btrieve NLM
  584.                v     |         |                    |   ^
  585.             Btrieve NLM <------+                    |   |
  586.                |     ^                              v   |
  587.                |     |                             NetWare
  588.                v     |                              |   ^
  589.                NetWare                              |   |
  590.                |     ^                              |   |  Server B
  591.      Server A  |     |                          ----|---|----------
  592.                |     |                              v   |
  593.      ----------|-----|------                      File System
  594.                v     |
  595.              File System
  596.  
  597.  
  598. Server Application Using BSPXSTUB
  599.  
  600. Figure 2-6 shows an application running on the server.  The
  601. application is accessing local data.  The Btrieve Monitor
  602. utility (BTRMON.NLM) is also running on the server.  Since
  603. the Btrieve NLM is not accepting any incoming requests,
  604. BSPXCOM is not loaded.  However, to run the Monitor
  605. utility, the server must have either BSPXCOM, BSPXSTUB, or
  606. RSPXSTUB loaded.  Since the Btrieve Message Router is not
  607. loaded, BSPXSTUB is the appropriate communications module
  608. to have loaded.
  609.  
  610. When BSPXSTUB is loaded, the Communication Statistics
  611. option in the Btrieve Monitor utility shows zeros for the
  612. SPX statistics, since there is no SPX activity.
  613.  
  614. Figure 2-6 Server Application Using BSPXSTUB
  615.  
  616.     +------------>NLM Application
  617.     |
  618.     |
  619.     |
  620.     |         RSPXSTUB / BTRMON
  621.     |                   ^  |
  622.     |                   |  |
  623.     |                   |  v
  624.     +-------------> Btrieve NLM
  625.                         |  ^
  626.                         |  |
  627.                         v  |
  628.               NetWare
  629.                         |  ^
  630.               Server    |  |
  631.                         |  |
  632.               ----------|--|------
  633.                         v  |
  634.             File System
  635.  
  636.  
  637. Server Application Using NetWare SQL
  638.  
  639. Figure 2-7 shows NetWare SQL running on Server A.  Since
  640. NetWare SQL needs to access data on both Server A and
  641. Server B, the Btrieve Message Router is loaded on Server
  642. A.  In addition, NSSPXCOM is loaded on Server A because
  643. NetWare SQL is also responding to requests from a NetWare
  644. SQL Requester running on a remote workstation.  (NSSPXCOM
  645. provides the same functionality for NetWare SQL as BSPXCOM
  646. provides for Btrieve.)
  647.  
  648. Figure 2-7 Server Application Using NetWare SQL
  649.  
  650.           NSSPXCOM<=============> Incoming requests from/to
  651.            |     ^              a remote source
  652.                |     |
  653.                v     |
  654.          NetWare SQL
  655.                |     ^
  656.                |     |
  657.                v     |
  658.       Btrieve Message<========================>BSPXCOM
  659.            Router                    |    ^
  660.            |     ^                    |    |
  661.                |     |                              v   |
  662.                |     |                            Btrieve NLM
  663.                v     |                              |   ^
  664.          Btrieve NLM                |    |
  665.                |     ^                              v   |
  666.            |     |                   NetWare
  667.                v     |                              |   ^
  668.            NetWare                    |    |
  669.                |     ^                              |   |  Server B
  670.      Server A  |     |                          ----|---|----------
  671.                |     |                              v   |
  672.      ----------|-----|------                      File System
  673.                v     |
  674.      File System
  675.  
  676.